package com.ccom.test.easyExcel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ccom.api.domain.excel.ArticleExcel;
import com.ccom.test.service.ArticleService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description:
 * @author: jjzhang24
 * @date: 2021年12月21日
 */
@Data
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ArticleExcelListener extends AnalysisEventListener<ArticleExcel> {

    /**
     * 默认每隔200条存储数据库
     */
    private int batchCount = 200;
    /**
     * 缓存的数据列表
     */
    private List<ArticleExcel> list = new ArrayList<>();
    /**
     * 用户service
     */
    private final ArticleService articleService;

    @Override
    public void invoke(ArticleExcel data, AnalysisContext context) {
        list.add(data);
        // 达到BATCH_COUNT，则调用importer方法入库，防止数据几万条数据在内存，容易OOM
        if (list.size() >= batchCount) {
            // 调用importer方法
            articleService.importUser(list);
            // 存储完成清理list
            list.clear();
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 调用importer方法
        articleService.importUser(list);
        // 存储完成清理list
        list.clear();
    }
}
